package com.yang.controller;

import com.yang.entity.Cart;
import com.yang.entity.Result;
import com.yang.interceptors.LogExecutionTime;
import com.yang.service.CartService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;

import java.util.Arrays;
import java.util.List;

@RestController
@RequestMapping("/cart")
public class CartController {

    @Resource
    private CartService cartService;

    /**
     * 添加商品到购物车
     *
     * @param commodityId 商品id
     * @param skuId       sku的id
     * @param quantity    数量 -
     * @return
     */
    @PostMapping("/add")
    @LogExecutionTime
    public Result addCart(int commodityId, int skuId, int quantity) {
        cartService.addCart(commodityId, skuId, quantity);
        return Result.success();
    }

    /**
     * 删除购物车商品
     *
     * @param cartId 购物车id
     * @return
     */
    @PostMapping("/delete")
    @LogExecutionTime
    public Result deleteCart(String[] cartId) {
        System.out.println("cartId" + Arrays.toString(cartId));
        // 转换为List<Integer> TODO 这里的cartId应该是long类型，但数据实际上没有那么多，所以暂时先用int类型
        List<Integer> cartIdList = Arrays.stream(cartId).map(Integer::parseInt).toList();
        // 调用service
        return switch (cartService.deleteCart(cartIdList)) {
            case 1 -> Result.error("删除失败，购物车不存在该商品");
            case 0 -> Result.success();
            default -> null;
        };
    }

    /**
     * 更新购物车商品数量
     *
     * @param cartId   购物车id
     * @param quantity 数量
     * @return
     */
    @PostMapping("/update")
    @LogExecutionTime
    public Result updateCart(Integer cartId, Integer quantity) {
        // 调用service
        return switch (cartService.updateCart(cartId, quantity)) {
            case 1 -> Result.error("更新失败，购物车不存在该商品");
            case 0 -> Result.success();
            default -> null;
        };
    }

    /**
     * 获取购物车列表
     *
     * @return
     */
    @GetMapping("/list")
    @LogExecutionTime
    public Result<List<Cart>> listCart() {
        List<Cart> cartDetailsList = cartService.listCart();
        return Result.success(cartDetailsList);
    }

}
